Zmena rozmeru u DBGridu

Otázka od: Lebeda David

30. 9. 2004 14:14

Ahoj,

mam form, na nem PanelDolni s Align = alBottom a DBGrid s Align = AlClient.
Proste
grid a pod nim panel. V AfterScroll datasetu se rozhodnu, jestli ma byt
PanelDolni
viditelny nebo ne. Tj. pri listovani gridem pro nektere zaznamy grid zabira
cely form a
pro nektere zaznamy se objevi jeste PanelDolni (cimz se snizi vyska gridu).
Funguje to
az na jednu malickost. Dejme tomu, ze pro prvni dva radky v gridu je PanelDolni

viditelny, pro treti radek ma byt neviditelny. Kdyz prejedu z druheho na treti
radek,
PanelDolni zmizi, velikost komponenty gridu se radne zvetsi, to je OK - ale
grid stale
ukazuje jen ty radky, ktere byly viditelne predtim. Neboli tam, co byl
PanelDolni, je jen
prazdne misto, nejsou tam radky s daty. Pokud zmenim velikost formu napr.
potazenim
mysi, grid se prekresli a radky jiz vyplnuji celou plochu. Jevi se mi to tak,
ze
komponenta gridu se roztahne, ale pocet viditelnych radku se nezmeni. Volani
Invalidate gridu nepomuze. Nevite nekdo, jak mam rict gridu, aby si znovu
zkontroloval,
kolik ze to ma vlastne ukazovat radku?

D5

Diky

David Lebeda


Odpovedá: Karel Halamasek

30. 9. 2004 17:05

Ted nemam cas to vyzkouset, ale myslim , ze toto to vyresi:

DBGrid1.Refresh;

Karel Halamasek COMPRO

> Ahoj,
>
> mam form, na nem PanelDolni s Align = alBottom a DBGrid s Align =
> AlClient. Proste
> grid a pod nim panel. V AfterScroll datasetu se rozhodnu, jestli ma byt
> PanelDolni
> viditelny nebo ne. Tj. pri listovani gridem pro nektere zaznamy grid
> zabira cely form a
> pro nektere zaznamy se objevi jeste PanelDolni (cimz se snizi vyska
> gridu). Funguje to
> az na jednu malickost. Dejme tomu, ze pro prvni dva radky v gridu je
> PanelDolni
> viditelny, pro treti radek ma byt neviditelny. Kdyz prejedu z druheho na
> treti radek,
> PanelDolni zmizi, velikost komponenty gridu se radne zvetsi, to je OK -
> ale grid stale
> ukazuje jen ty radky, ktere byly viditelne predtim. Neboli tam, co byl
> PanelDolni, je jen
> prazdne misto, nejsou tam radky s daty. Pokud zmenim velikost formu
> napr. potazenim
> mysi, grid se prekresli a radky jiz vyplnuji celou plochu. Jevi se mi to
> tak, ze
> komponenta gridu se roztahne, ale pocet viditelnych radku se nezmeni.
> Volani
> Invalidate gridu nepomuze. Nevite nekdo, jak mam rict gridu, aby si
> znovu zkontroloval,
> kolik ze to ma vlastne ukazovat radku?
>
> D5
>
> Diky
>
> David Lebeda
>
>
>

--


Odpovedá: Lebeda David

1. 10. 2004 6:06

> Ted nemam cas to vyzkouset, ale myslim , ze toto to vyresi:
>
> DBGrid1.Refresh;

Ahoj,

nevyresi. Zkusil jsem, ale pricina chyby neni v tom, ze by byl grid spatne
vykreslen, ale
ze nedoslo k prepocitani poctu viditelnych radku (RowCount) po roztazeni gridu.

Nicmene jsem zjistil, jak si poradit. Nevim, zda tim nepacham neco
nebezpecneho, ale
pote, co rozhodnu o viditelnosti/neviditelnosti panelu, volam

 THDBGrid(Grid).EndLayout;

kde THDBGrid = class(TDBGrid) end; je pouzito jen pro zpristupneni metody
EndLayout, ktera je protected.

Pokud byste nekdo mel pocit, ze si zahravam s peklem, pripadne vedel, jak to
udelat
lip, jsem jedno velke ucho.

David Lebeda

>
> > mam form, na nem PanelDolni s Align = alBottom a DBGrid s Align =
> > AlClient. Proste grid a pod nim panel. V AfterScroll datasetu se
> > rozhodnu, jestli ma byt PanelDolni viditelny nebo ne. Tj. pri
> > listovani gridem pro nektere zaznamy grid zabira cely form a pro
> > nektere zaznamy se objevi jeste PanelDolni (cimz se snizi vyska
> > gridu). Funguje to az na jednu malickost. Dejme tomu, ze pro prvni
> > dva radky v gridu je PanelDolni viditelny, pro treti radek ma byt
> > neviditelny. Kdyz prejedu z druheho na treti radek, PanelDolni
> > zmizi, velikost komponenty gridu se radne zvetsi, to je OK - ale
> > grid stale ukazuje jen ty radky, ktere byly viditelne predtim.
> > Neboli tam, co byl PanelDolni, je jen prazdne misto, nejsou tam
> > radky s daty. Pokud zmenim velikost formu napr. potazenim mysi,
> > grid se prekresli a radky jiz vyplnuji celou plochu. Jevi se mi to
> > tak, ze komponenta gridu se roztahne, ale pocet viditelnych radku se
> > nezmeni.

Odpovedá: Dalibor Faltynek

1. 10. 2004 6:39

A co zkusit proste Align prestavit na all none a pak na allclient?
Dalik.

> mam form, na nem PanelDolni s Align = alBottom a DBGrid s Align =
AlClient. Proste
> grid a pod nim panel. V AfterScroll datasetu se rozhodnu, jestli ma byt
PanelDolni
> viditelny nebo ne. Tj. pri listovani gridem pro nektere zaznamy grid
zabira cely form a
> pro nektere zaznamy se objevi jeste PanelDolni (cimz se snizi vyska
gridu). Funguje to
> az na jednu malickost. Dejme tomu, ze pro prvni dva radky v gridu je
PanelDolni
> viditelny, pro treti radek ma byt neviditelny. Kdyz prejedu z druheho na
treti radek,
> PanelDolni zmizi, velikost komponenty gridu se radne zvetsi, to je OK -
ale grid stale
> ukazuje jen ty radky, ktere byly viditelne predtim. Neboli tam, co byl
PanelDolni, je jen
> prazdne misto, nejsou tam radky s daty. Pokud zmenim velikost formu napr.
potazenim
> mysi, grid se prekresli a radky jiz vyplnuji celou plochu. Jevi se mi to
tak, ze
> komponenta gridu se roztahne, ale pocet viditelnych radku se nezmeni.
Volani
> Invalidate gridu nepomuze. Nevite nekdo, jak mam rict gridu, aby si znovu
zkontroloval,
> kolik ze to ma vlastne ukazovat radku?
>


Odpovedá: Dalibor Faltynek

1. 10. 2004 7:02

Ne, zkusil jsem to a nic, ale dalsi sranda je, ze kdyz kliknes na sipku
scrollbaru, grid se roztahne a jsou tam dve sipky.
DF.


> A co zkusit proste Align prestavit na all none a pak na allclient?
> Dalik.
>



Odpovedá: Jan Rizek

1. 10. 2004 8:36

A co nejaky

DBGrid.repaint..